package com.nidu.demo.mail.gateway;

import com.alibaba.cola.dto.PageResponse;
import com.nidu.demo.mail.model.MailLog;
import com.nidu.demo.mail.model.MailLogCriteria;

import java.util.List;
import java.util.Set;

/**
 * 邮件日志网关接口
 * 供领域层调用，实现跨上下文/基础设施的邮件日志数据访问
 *
 * @author auto
 */
public interface MailLogGateway {

    /**
     * 创建邮件日志
     *
     * @param mailLog 邮件日志信息
     * @return 创建后的邮件日志
     */
    MailLog create(MailLog mailLog);

    /**
     * 修改邮件日志
     *
     * @param mailLog 邮件日志信息
     * @return 修改后的邮件日志
     */
    MailLog update(MailLog mailLog);

    /**
     * 删除单个邮件日志
     *
     * @param id 邮件日志ID
     */
    void deleteById(Long id);

    /**
     * 批量删除邮件日志
     *
     * @param ids 邮件日志ID列表
     */
    void deleteByIds(Set<Long> ids);

    /**
     * 根据邮件日志ID查询
     *
     * @param id 邮件日志ID
     * @return 邮件日志信息
     */
    MailLog getById(Long id);

    /**
     * 根据邮件日志ID列表查询
     *
     * @param ids 邮件日志ID列表
     * @return 邮件日志列表
     */
    List<MailLog> getByIds(Set<Long> ids);

    /**
     * 列表查询
     *
     * @param criteria 查询条件
     * @return 邮件日志列表
     */
    List<MailLog> listByCondition(MailLogCriteria criteria);

    /**
     * 分页查询
     *
     * @param criteria 查询条件
     * @return 分页结果
     */
    PageResponse<MailLog> pageByCondition(MailLogCriteria criteria);

    /**
     * 更新发送成功状态
     *
     * @param id
     * @param status
     */
    public void updateSendSuccess(Long id, Integer status, String sendMessageId);

    /**
     * 更新发送失败状态
     *
     * @param id
     * @param status
     * @param sendException
     */
    public void updateSendFail(Long id, Integer status, String sendException);

}
